include_guard()

# Enable cache if available
function(enable_ccache)
    set(CACHE_OPTION
        "ccache"
        CACHE STRING
              "Compiler cache to be used")
    set(CACHE_OPTION_VALUES
        "ccache"
        "sccache")
    set_property(
        CACHE CACHE_OPTION
        PROPERTY STRINGS
                 ${CACHE_OPTION_VALUES})
    list(
        FIND
        CACHE_OPTION_VALUES
        ${CACHE_OPTION}
        CACHE_OPTION_INDEX)

    if(${CACHE_OPTION_INDEX}
       EQUAL
       -1)
        message(STATUS "Using custom compiler cache system: '${CACHE_OPTION}', explicitly supported entries are ${CACHE_OPTION_VALUES}")
    endif()

    find_program(
        CACHE_BINARY
        NAMES ${CACHE_OPTION_VALUES})
    if(CACHE_BINARY)
        message(STATUS "${CACHE_BINARY} found and enabled")
        set(CMAKE_CXX_COMPILER_LAUNCHER
            ${CACHE_BINARY}
            CACHE FILEPATH
                  "CXX compiler cache used")
        set(CMAKE_C_COMPILER_LAUNCHER
            ${CACHE_BINARY}
            CACHE FILEPATH
                  "C compiler cache used")
    else()
        message(WARNING "${CACHE_OPTION} is enabled but was not found. Not using it")
    endif()
endfunction()
